<?php
// +----------------------------------------------------------------------
// | 双擎基础框架 [ 基于ThinkLibrary扩展 ]
// +----------------------------------------------------------------------
// | 感谢ThinkLibrary原作者Anyon的封装
// +----------------------------------------------------------------------
// | Copyright (c) 2022~2024 https://www.sqm.la All rights reserved.
// +----------------------------------------------------------------------
// | Author: rotoos <87291030@qq.com>
// +----------------------------------------------------------------------
declare (strict_types=1);

namespace think\admin\model;

use think\admin\Model;


/**
 * 后台用户表表模型
 * Class SysUser
 * @package think\admin\model
 */
class SysUser extends Model
{
    /**
     * 字段转驼峰
     * @var bool
     */
    protected $convertNameToCamel = true;

    /**
     * 定义全局作用域
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        // 添加全局作用域
        static::addGlobalScope('withName', function ($query) {
            $query->with(['name']);
        });
    }

    /**
     * 获取一条信息的详情
     * @param $id
     * @return array|mixed|SysUser|\think\Model
     */
    public static function detail($id)
    {
        return static::mk()->where(['id' => $id])->where(['is_deleted' => 0, 'status' => 0])->findOrEmpty();
    }


    /**
     * 格式化输出时间
     * @param mixed $value
     * @return string
     */
    public function getUpdateTimeAttr($value): string
    {
        return format_datetime($value);
    }

    /**
     * 时间写入格式化
     * @param mixed $value
     * @return string
     */
    public function setUpdateTimeAttr($value): string
    {
        return is_string($value) ? str_replace(['年', '月', '日'], ['-', '-', ''], $value) : $value;
    }

    /**
     * 格式化输出手机号
     * @param $value
     * @return string
     */
    public function getPhoneAttr($value): string
    {
        // 检查$value是否为非空字符串且长度至少为7个字符
        if (is_string($value) && strlen($value) >= 7) {
            return substr_replace($value, '****', 3, 4);
        }

        // 确保返回值始终是一个字符串
        return (string)$value;
    }



    /**
     * 格式化输出邮箱
     * @param $value
     * @return string
     */
    public function getEmailAttr($value): string
    {
        if (is_string($value) && strlen($value) >= 3) {
            $emailArray = explode('@', $value);
            $emailArray[0] = substr($emailArray[0], 0, 1) . str_repeat('*', strlen($emailArray[0]) - 2) . substr($emailArray[0], -1);
            return implode('@', $emailArray);
        }
        // 确保返回值始终是一个字符串
        return (string)$value;
    }


    /**
     * 完整的手机号 $user = User::field('id, name, full_phone')->find($userId); // 完整信息
     * $user = User::find($userId)->hidden(['phone']); // 隐藏mobile属性，不应用获取器
       // 或者 $user = User::find($userId)->visible(['full_phone']); // 只显示full_mobile属性
     * @param $value
     * @param $data
     * @return mixed
     */
    public function getFullPhoneAttr($value, $data)
    {
        return isset($data['phone']) && is_string($data['phone']) ? $data['phone'] : '';
    }

    /**
     * 完整的邮箱
     * @param $value
     * @param $data
     * @return mixed
     */
    public function getFullEmailAttr($value, $data)
    {
        return isset($data['email']) && is_string($data['email']) ? $data['email'] : '';
    }
}